home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
SGI Freeware 2002 November
/
SGI Freeware 2002 November - Disc 1.iso
/
dist
/
fw_exmh.idb
/
usr
/
freeware
/
lib
/
exmh-2.5
/
textButton.tcl.z
/
textButton.tcl
Wrap
Text File
|
2002-07-08
|
4KB
|
129 lines
#
# $Id: textButton.tcl,v 1.3 2000/02/02 19:33:58 valdis Exp $
#
# A text widget button that acts like a Button widget.
# - John Robert LoVerso
#
proc TextButton_Init { {t {}} } {
global tkPriv
set tkPriv(seed) 0
if {[winfo depth .] > 4} {
Preferences_Resource tkPriv(background) c_uri thistle
Preferences_Resource tkPriv(foreground) c_uriFg black
Preferences_Resource tkPriv(activebackground) c_uriAbg white
Preferences_Resource tkPriv(activeforeground) c_uriAfg black
} else {
Preferences_Resource tkPriv(background) c_uri black
Preferences_Resource tkPriv(foreground) c_uriFg white
Preferences_Resource tkPriv(activebackground) c_uriAbg white
Preferences_Resource tkPriv(activeforeground) c_uriAfg black
}
if {$t != {}} {
# Hack - we know tags with names hdrlook=* are preserved.
# These tags just serve to pre-allocate our colors
$t tag configure hdrlook=TextButton1 -foreground $tkPriv(foreground) \
-background $tkPriv(background)
$t tag configure hdrlook=TextButton2 \
-foreground $tkPriv(activeforeground) \
-background $tkPriv(activebackground)
}
}
proc TextButton { w text cmd } {
$w insert insert { }
set start [$w index insert]
$w insert insert $text
set end [$w index insert]
$w insert insert { }
set tag [TextButtonRange $w $start $end $cmd]
}
proc TextButtonRange { w start end cmd } {
global tkPriv
incr tkPriv(seed)
set id tkPriv$tkPriv(seed)
$w tag add $id $start "$end +1 char"
$w tag bind $id <Any-Enter> [concat TextButtonEnter $w $id]
$w tag bind $id <Any-Leave> [concat TextButtonLeave $w $id]
$w tag bind $id <1> [concat TextButtonDown $w $id]
$w tag bind $id <ButtonRelease-1> [concat TextButtonUp $w $id [list $cmd]]
$w tag configure $id -relief raised -borderwidth 2 \
-background $tkPriv(background) -foreground $tkPriv(foreground)
return $id
}
#
#
# from button.tcl --
#
# The procedure below is invoked when the mouse pointer enters a
# button widget. It records the button we're in and changes the
# state of the button to active unless the button is disabled.
proc TextButtonEnter {w id} {
global tkPriv
$w tag configure $id -background $tkPriv(activebackground) \
-foreground $tkPriv(activeforeground)
$w configure -cursor cross
set tkPriv(window) $w
set tkPriv(id) $id
}
# The procedure below is invoked when the mouse pointer leaves a
# button widget. It changes the state of the button back to
# inactive.
proc TextButtonLeave {w id} {
global tkPriv
#puts "Leave"
$w tag configure $id -background $tkPriv(background) \
-foreground $tkPriv(foreground)
$w configure -cursor [option get $w cursor Text ]
set tkPriv(window) ""
set tkPriv(id) ""
set tkPriv(cmd) ""
}
# The procedure below is invoked when the mouse button is pressed in
# a button/radiobutton/checkbutton widget. It records information
# (a) to indicate that the mouse is in the button, and
# (b) to save the button's relief so it can be restored later.
proc TextButtonDown {w id} {
global tkPriv
set tkPriv(relief) [lindex [$w tag config $id -relief] 4]
set tkPriv(buttonWindow) $w
set tkPriv(buttonId) $id
$w tag configure $id -relief sunken
}
# The procedure below is invoked when the mouse button is released
# for a button/radiobutton/checkbutton widget. It restores the
# button's relief and invokes the command as long as the mouse
# hasn't left the button.
proc TextButtonUp {w id {cmd {}}} {
global tkPriv
#puts "Up"
if {$w == $tkPriv(buttonWindow) && $id == $tkPriv(buttonId)} {
$w tag config $id -relief $tkPriv(relief)
if {$w == $tkPriv(window) && $id == $tkPriv(id)} {
set tkPriv(cmd) $cmd
#puts "Primed"
after 1 TextButtonActivate $w $id
}
set tkPriv(buttonWindow) ""
set tkPriv(buttonId) ""
}
}
proc TextButtonActivate {w id} {
global tkPriv
#puts "Activate cmd=$tkPriv(cmd)"
eval $tkPriv(cmd)
}